package edu.server.dominio;

import java.util.List;

import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.Session;

import edu.server.repositorio.RequerimientoAdicionalesCompra;
import edu.server.util.HibernateUtil;

public class D_RequerimientoAdicionalCompra {
	
	public D_RequerimientoAdicionalCompra()
	{
		
	}
	
	/**
	 * Método que busca en la base de datos el requerimiento adicional vinculado a un renlón de orden de compra.
	 * @param idRenglon. Id del renglón de la orden de compra.
	 * @return RequerimientoAdicionalesCompra. Retorna el requerimiento de compra adicional relacionado al renglón.
	 */
	public RequerimientoAdicionalesCompra buscarPorRenglonOrdenCompra(int idRenglon)
	{
		RequerimientoAdicionalesCompra requerimiento;
		
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		
		session.beginTransaction();
		
		String hql = "from RequerimientoAdicionalesCompra " +
					 "where renglonOrdenCompraProducto.idRenglonOrdenCompraProducto = " + idRenglon;
		
		requerimiento = (RequerimientoAdicionalesCompra)session.createQuery(hql).uniqueResult();
		
		if(requerimiento != null)
		{
			Hibernate.initialize(requerimiento.getProducto());
			Hibernate.initialize(requerimiento.getProducto().getElementoProducto());
			Hibernate.initialize(requerimiento.getProducto().getMaterialProducto());
			Hibernate.initialize(requerimiento.getProducto().getMedidaFijaProducto());	
		}
		
		session.close();
		
		return requerimiento;
	}
	
	
	/**
	 * Método que guarda en la base de datos un conjunto de requerimientos adicionales de compra
	 * @param requerimientos. Lista de requerimientos adicionales de compra a guardar
	 */
	public void registrar(List<RequerimientoAdicionalesCompra> requerimientos)
	{
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		
		try{
			session.beginTransaction();
			
			for(RequerimientoAdicionalesCompra requerimiento : requerimientos)
				session.save(requerimiento);
			
			session.getTransaction().commit();
		}
		
		catch(HibernateException he)
		{
			session.getTransaction().rollback();
			
			throw he;
		}
		
	}

}
